home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / src / X11 / xarchie-2.0.9 / tilde.c < prev    next >
C/C++ Source or Header  |  1995-06-18  |  1KB  |  59 lines

  1. /*
  2.  * tilde.c : Tilde expansion for filenames
  3.  *
  4.  * George Ferguson, ferguson@cs.rochester.edu, 23 Apr 1993.
  5.  * 13 May 1993: Cleanups.
  6.  *
  7.  */
  8.  
  9. #include <stdio.h>
  10. #include <sys/types.h>
  11. #include <pwd.h>
  12. #include "config.h"
  13. #ifdef HAVE_SYS_PARAM_H
  14. # include <sys/param.h>
  15. #endif
  16. #include "alert.h"
  17. #include "sysdefs.h"
  18. #include "stringdefs.h"
  19. extern uid_t getuid();        /* not in stdlib.h, but is in unistd.h */
  20.  
  21. char *
  22. tildeExpand(file)
  23. char *file;
  24. {
  25.     static char filename[MAXPATHLEN];
  26.     struct passwd *pwe;
  27.     char *name,*home;
  28.  
  29.     /* Must start with tilde */
  30.     if (*file != '~')
  31.     return(file);
  32.     /* Set default return value in case tilde expansion fails */
  33.     strcpy(filename,file);
  34.     /* Skip tilde */
  35.     name = ++file;
  36.     /* Gather name following tilde (if any) */
  37.     while (*file != '\0' && *file != '/')
  38.     file += 1;
  39.     if (*file != '\0')
  40.     *file++ = '\0';
  41.     if (*name == '\0') {                /* ~/... */
  42.     if ((pwe=getpwuid(getuid())) != NULL) {
  43.         home = pwe->pw_dir;
  44.     } else if ((home=getenv("HOME")) == NULL) {
  45.         alert0("Couldn't find homedir, you should set $HOME");
  46.         return(filename);
  47.     }
  48.     } else {                        /* ~user/... */
  49.     if ((pwe=getpwnam(name)) != NULL) {
  50.         home = pwe->pw_dir;
  51.     } else {
  52.         alert1("Couldn't find homedir for \"%s\"",name);
  53.         return(filename);
  54.     }
  55.     }
  56.     sprintf(filename,"%s/%s",home,file);
  57.     return(filename);
  58. }
  59.